/**
 * Swagger 配置模块
 * @module swagger
 * @description 自动生成 API 文档配置
 */

const swaggerJsDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');

/**
 * Swagger 配置选项
 * @type {Object}
 */
const swaggerOptions = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: '自媒体 API 服务',
      version: '1.0.0',
      description: '用于生成图片、视频、音频的 RESTful API',
    },
    servers: [
      {
        url: 'http://localhost:3000',
        description: '本地开发服务器',
      },
    ],
    components: {
      schemas: {
        VideoRequest: {
          type: 'object',
          properties: {
            duration: {
              type: 'number',
              example: 60,
              description: '视频时长（秒）'
            },
            text: {
              type: 'string',
              example: '欢迎使用视频生成服务',
              description: '要添加的文字'
            },
            imageUrl: {
              type: 'string',
              example: 'https://example.com/image.jpg',
              description: '背景图片URL'
            }
          }
        },
        VideoResponse: {
          type: 'object',
          properties: {
            success: {
              type: 'boolean',
              example: true
            },
            url: {
              type: 'string',
              example: 'http://example.com/output.mp4'
            },
            message: {
              type: 'string',
              example: '视频生成成功'
            }
          }
        }
      }
    }
  },
  // 指定包含 JSDoc 注释的文件路径
  apis: ['./src/routes/*.js', './src/controllers/*.js', './src/services/*.js'],
};

/**
 * 生成的 Swagger 文档
 * @type {Object}
 */
const swaggerSpec = swaggerJsDoc(swaggerOptions);

/**
 * 设置 Swagger 文档路由
 * @param {Object} app - Express 应用实例
 */
function setupSwagger(app) {
  // Swagger UI 路由
  app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

  // Swagger JSON 路由
  app.get('/api-docs.json', (req, res) => {
    res.setHeader('Content-Type', 'application/json');
    res.send(swaggerSpec);
  });

  console.log('📚 Swagger 文档已生成，访问 http://localhost:3000/api-docs');
}

module.exports = setupSwagger; 